package date0531_1;
/**
 * 1、测试 intern 方法
 * 2、String常量池 中存放的全部是 String实例
 */
public class StringTestG {

	public static void main(String[] args) {
		
		String a = "黄沙百战" ;
		String b = "穿金甲" ; 
		String c = "黄沙百战穿金甲" ; 
		String d = a + b ; 
		System.out.println( c == d );  // false
		
		System.out.println( "~ ~ ~ ~ ~ ~ ~" );
		
		// 当通过 某个String实例 来调用其 intern 方法时，
		// 如果 String常量池 中已经包含一个 与该String实例 所包含内容相等 ( 用 equals(Object)确定 ) 的 String实例，
		// 就直接返回在 String常量池 中已经存在的 String实例 ( 不再将当前的 String实例 添加到 String常量池 ) 。
		// 否则，将 此 String实例 添加到 String常量池 中，并返回 此String实例 的引用 ( 即返回 String常量池 中新增的 String实例 的地址 )
		String f = d.intern();
		System.out.println( c == f ); // true
		
		System.out.println( "~ ~ ~ ~ ~ ~ ~" );
		
		String s = new String( "不破楼兰终不还" );
		String x = new String( "不破楼兰终不还" );
		
		System.out.println( s == x ); // false
		System.out.println( s.equals( x ) ); // true
		
		String t = s.intern() ;
		String r = x.intern() ;
		System.out.println( t == r ); // true
		
	}

}
